#include "executorTask.h"
#include <stdio.h>
#include "GatherDataHandlerMemory.h"
#include "Thdata.h"
#include "oled.h"
#include "beep.h"
#include "led.h"
#include "ConfigLogic.h"
void showContrl();
void alarmContrl();
void airContrl();
void curtainContrl();
//目标数据
extern GatherTargetData  targetData;

//阈值数据
THData thdata;
void executorTaskInit(){
	//如果是开机重启后，
	if(thdata.state==0){
		//需要加载阈值数据--读eeprom,现在先模拟
		 if(!config_eepprom_init()) return; 
	   loadTHData(&thdata);
		
	}
	
	//做外设的初始化
	OLED_Init();
	BEEP_Init();
	LED_Init();

}

//给配置模块使用
void setTHData(THData thdataTmp){
	thdata = thdataTmp;
}


void executorTaskTaskFun(void * p){
	while(1){
		

		
		printf("state=%d\r\n",thdata.state);
		printf("temp=%d,humi=%d\r\n",thdata.temp,thdata.humi);
		printf("sunshine=%d\r\n",thdata.sunshine);
		//调用数据处理模块进行处理
		
		u8 state = thdata.state;  //1111
		//显示控制
		if(state&0x01)  //1110 &0001
		{
		   showContrl();
		}
	
		//告警控制
		if(state&0x02){
		   alarmContrl();
		}
		
		//空调控制
		if(state&0x04){
		   airContrl();
		}
		//窗帘控制
		if(state&0x08){
		   curtainContrl();
		}
		vTaskDelay(500);
	}
	
}

void executorTaskCreate(){

	//创建一个启动任务
		BaseType_t result = xTaskCreate(
			executorTaskTaskFun,
			EXECUTOR_TASK_NAME,
			EXECUTOR_TASK_STACK_DEPTH,
			NULL,
			EXECUTOR_TASK_PRIORITY,
			NULL
		);
	
	
	if(result==pdPASS)
		printf("create executorTask task sucess!\r\n");
	else
	  printf("create executorTask task fail!\r\n");
	
}


void showContrl(){
	  //temp:12
		OLED_ShowString(0,0,"temp:",12);
		OLED_Refresh_Gram();
		OLED_ShowNum(30,0,targetData.temp,3,12);
		OLED_Refresh_Gram();
}


void alarmContrl(){
	int flag = 0;
	//temp是大的那个
	if(targetData.temp>thdata.temp || targetData.temp < thdata.temp1){
		//led2亮
		//蜂鸣器响
		flag =1;
		led1=0;
	}else{
		led1=1;
	}
	
	if(targetData.humi>thdata.humi || targetData.humi < thdata.humi1){
		//led3亮
		//蜂鸣器响
		flag =1;
		led2=0;
	}else{
		led2=1;
	}
	
	if(targetData.smoke>thdata.smoke){
		//led4亮
		//蜂鸣器响
		flag =1;
		led3=0;
	}else{
		led3=1;
	}
	
	
	if(targetData.sunshine>thdata.sunshine){
		//led5亮
		//蜂鸣器响
		flag =1;
		led4=0;
	}else{
		led4=1;
	}
	
		
	if(targetData.raidrop==0){
		//led6亮
		//蜂鸣器响
		flag =1;
		led5=0;
	}else{
		led5=1;
	}
	
	
	if(flag) BEEP=1;//蜂鸣器叫
	else BEEP=0;//蜂鸣器不叫
	
}
void airContrl()
{
	//空调控制
	//方案1： 红外发送器（大部分空调都支持）  ----只板载红外接收器，我们要的是发送器。
	//方案2： 语音控制（）
}
void curtainContrl(){
	
	//窗帘控制
	//方案1： 步进电机（采纳）
	//方案2： 电磁继电器
}
	